﻿using ProyectoDeTesis.Modelos.Filtros;
using System;
using System.Collections.Generic;
using System.Linq;

namespace ProyectoDeTesis.Controladores
{
    public class PerfilController
    {
        public List<Perfil> CargarPerfil()
        {
          var  bd = new Bd_tesisDataContext();
          var query = from c in bd.Perfil
                      where c.estado == "Si"
                      select c;
          var lp = query.ToList();

          return lp;
        }

        public Perfil CargarPerfilxId(int id)
        {
            var db = new Bd_tesisDataContext();
            var query = from p in db.Perfil
                        where p.id == id
                        select p;
            
            List<Perfil> listaPerfil = query.ToList();

            return listaPerfil.First();
        }

        public List<Perfil> BuscarPerfilesFiltro(FiltroPerfil filtroPerfil) { 
            
            var db = new Bd_tesisDataContext();

            var query = from p in db.Perfil
                        where (p.fechaRegistro >= filtroPerfil.fechaInicio && p.fechaRegistro <= filtroPerfil.fechaFin.AddDays(1)) && (p.estado == "Si")
                        select p;

            if (filtroPerfil.idPerfil > 0) {
                query = query.Where(x => x.id == filtroPerfil.idPerfil);
            }
            
            List<Perfil> listaPerfil = query.ToList();

            return listaPerfil;
        }


        public bool IngresarPerfil(Perfil p)
        {
            var bd = new Bd_tesisDataContext();
            Perfil perfil = new Perfil();
            perfil.nombre = p.nombre;
            perfil.descripcion = p.descripcion;
            perfil.estado = "Si";
            perfil.fechaRegistro = DateTime.Now;
            perfil.fechaActualizacion = DateTime.Now;
            bd.Perfil.InsertOnSubmit(perfil);
            try
            {
                bd.SubmitChanges();
                return true;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                return false;
            }
        }

        public bool actualizarPerfil(int id, string nombre, string descripcion)
        {
            var bd = new Bd_tesisDataContext();
            Perfil perfil = bd.Perfil.Single(u => u.id == id);
            perfil.nombre = nombre;
            perfil.descripcion = descripcion;            
            try
            {
                bd.SubmitChanges();
                return true;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                return false;
            }
        }

        public bool eliminarPerfil(int perfil_id)
        {
            var bd = new Bd_tesisDataContext();
            Perfil perfil = bd.Perfil.Single(u => u.id == perfil_id);
            perfil.estado = "No";
            try
            {
                bd.SubmitChanges();
                return true;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                return false;
            }
        }

        public void crearPantallas(Perfil perfil)
        {
            
            int[] pantallas = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
            var bd = new Bd_tesisDataContext();

            foreach (int i in pantallas) 
            {
                PantallaPerfil pantallaPerfil = new PantallaPerfil();
                pantallaPerfil.pantalla_id = i;
                pantallaPerfil.perfil_id = perfil.id;
                pantallaPerfil.accesible = 1;

                bd.PantallaPerfil.InsertOnSubmit(pantallaPerfil);
            }

            bd.SubmitChanges();
        }

        public void modificarPerfil(Perfil perfil)
        {
            var bd = new Bd_tesisDataContext();
            Perfil p = bd.Perfil.Single(u => u.id == perfil.id);
            p.descripcion = perfil.descripcion;
            p.nombre = perfil.nombre;
            p.fechaActualizacion = DateTime.Now;
            bd.SubmitChanges();
        }

        public void crearComponentesPantalla(List<ComponentePantalla> list)
        {
            var bd = new Bd_tesisDataContext();

            bd.ComponentePantalla.InsertAllOnSubmit(list);

            bd.SubmitChanges();
        }

        public void modificarComponentesPantalla(List<ComponentePantalla> list)
        {
            var bd = new Bd_tesisDataContext();
            
            bd.SubmitChanges();
        }

        public List<ComponentePantalla> obtenerComponentesPantalla(Perfil perfil)
        {
            List<ComponentePantalla> result = null;
            var db = new Bd_tesisDataContext();

            try
            {
                var query = from c in db.ComponentePantalla
                            where c.perfil_id == perfil.id
                            select c;

                result = query.ToList();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }

            return result;
        }

        public Perfil buscarPerfilxNombre(string nombre)
        {
            Perfil perfil = new Perfil();
            var db = new Bd_tesisDataContext();
            try
            {
                var query = from p in db.Perfil
                            where p.nombre == nombre
                            select p;

                perfil = query.First();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }

            return perfil;
        }
    }
}
